Version 0.0 : 01/08/2021
rev : 30/03/2022
Etude Projet Clavier Matriciel 4x3 DIGIT
3000
revisité avec PIC18F27K42 en pdip28
Datasheet MCU (en pdip28 ,PIC18FxxK42
DS 40001919B rev 2017)
Prototype de Test sur
Breadboard
Schema
KeyBoard
4x3 sur carte Proto TANDY 276-1688
Software
pour Test cablage Clavier
Decodage
des touches clavier
Buzzer via
ressource Hardware NCO du MCU (generateur de frequence)
Alarme
Sabotage avec Timer4
Interruptions
Vectorisées pour les Timers et RB0 (et option UART)
Mode
Super Utilisateur via Terminal
(UART)
avec un
peu de Musique
L'Application (Mikro C):
Usage de
l' Eeprom du PIC pour stockage parametres clavier
Commande
d'un Relais 19/08/2021
Déroulement
sur terminal 19/08/2021
Applications pour
Commandes Distantes via BlueTooth :
Test BlueTooth Terminal sur Tablette Android LENOVO et HC05 sur UART PIC 16/10/2021
Test
Application Android BlueToothElectronics (appli SANS
Programmation) ( Lenovo TAB37)
La Réalisation :
Le
schemas version Clavier Digit 3000 (05/12/2021)
Les circuit
imprimés (23/09/2021)
Test
Montage Reel Hardware Digit 3000 avec MCU (cartes
Clavier + MCU assemblées) (30/11/2021)
Test
Final DIGIT 3000 (consignation via
terminal ) (31/01/2022)
Software
Digit 3000 (MikroC)
Migration
programme d'application vers MPLABX XC8
Prototype de test :
sur big BreadBoard!
(avec beaucoup d'intrus posés sur cette breadboard .. et
sans aucun rapport !)
.
Schémas :
Schema
: CLAVIER_4x4_Schema_V1.2.2._2021-0823pdf (par Henri Toussaint)
Schema
Uniquement Partie Clavier 4x3 (simplifié pour la
partie TEST CLAVIER uniquement)
Mon clavier sur
carte Prototype Tandy !
Minimum de configuration
avec :
* Fosc interne =64MHz
* Liaison UART1 Hardware avec RC6=TX et RC7=RX
-----------
* 3 sorties Colonnes
* 4 entrees Lignes
* 1 entree sommation Lignes(via OU hardware)
* 3 sorties Leds
* 1 Entree SW1 Reset
---------
* 1 sortie Alarme externe
Liaisons Hardware correspondante
/*
Pin 28 RB7 --x x-----------------------ICSP
Data ..... choix RA7
Pin 27 RB6 --x x-----------------------ICSP Clock.....choix RA7
Pin 26 RB5 Ouput --> SQA analyser
Pin 25 RB4 Ouput --> Relais 4
Pin 24 RB3 Ouput --> Relais 3
Pin 23 RB2 Ouput --> Relais 2
Pin 22 RB1 Ouput--> Relais 1
Pin 21 RB0 Input <--- OU à diodes sur les 4 lignes Clavier
Pin 20 VDD ---------------- ---------+5V
Pin 19 Vss ----------------------------Gnd fil noir cable
prolific
Pin 18 RC7 Input RX UART <------- Keyboard PC.. fil Vert cable
prolific
Pin 17 RC6 Ouput TX UART ------> Display PC ......fil Blanc
cable prolific
Pin 16 RC5 Ouput ---> Led RGB_Red
Pin 15 RC4 Ouput ---> Led RGB_Green
Pin 14 RC3 Ouput ---> Led RGB_Blue
Pin 13 RC2 Ouput ---> alarme externe
Pin 12 RC1 Input <---- BP Restauration => Reset logiciel
Pin 11 RC0 Output --> Buzzer
Pin 10 RA6 Ouput ---> Keyb_Col3
Pin 9 RA7 Ouput ----> Entree distante B2 ou Relais distant sur
B2
Pin 8 VSS ------------ Gnd
Pin 7 RA5 Ouput ----> Keyb_Col2
Pin 6 RA4 Ouput ----> Keyb_Col1
Pin 5 RA3 input <----- Keyb_Ligne 4
Pin 4 RA2 input <----- Keyb_Ligne 3
Pin 3 RA1 input <----- Keyb_Ligne 2
Pin 2 RA0 input <----- Keyb_Ligne 1
Pin 1 RE3 Input MCLR Reset <------------ICSP PGRM
|----x x----/0V cavalier ou BP RESET
Connection Interface Prolific TTL/USB , sur connecteur Uart de la
carte : RC7 et RC6 du MCU
Terminal YAT 19200,8,N,1 coté PC.
Utilisation quasi "standard" des Pins RC6=Tx et RC7=RX
Uart1
au niveau Hardware (PPS) , UART1 TX est
par défaut sur RC6.
ainsi que de la librairie UART1 MikroC
FOSC interne MCU à 64Mhz
config UART1 : 19200 (,8,N,1 par défaut).
Affectation des pins via PPS
:
Unlock_IOLOCK();
// UART1 (optionnel ! )
//RC6PPS = 0x13; //RC6->UART1:TX1;
U1RXPPS = 0x17; //RC7->UART1:RX1;
// NCO
RA5PPS = 0x26; //RA5->NCO1:NCO1;
Lock_IOLOCK();
*nota: la librairie PPS doit etre active,
elle occupe 1500 bytes !
Test connectique Clavier (
Tandy 276-1668) et
3 leds
Test Configuration de cablage des
touches :
Programme de Test :
....Uniquement de la partie touches
clavier !
Pour Eviter tout retour possible d'une sortie à 1 sur une autre
sortie à zero
si on appuie simultanement sur des touches non sur la meme
colonne
Chaque colonne ((RA4..RA6) est Activée uniquement et separement
des autres , qui restent alors en entrées.
Les 4 lignes en lecture (RA0..RA3) , donne le code de la touche 0
,1 ,2 ,4,8
qui est affiché sur le terminal
Le test de chaque touche se fait se fait en la tenant appuyé
entre chaque traitement allumage des 3 leds
Verifcation que RB0 passe à 1 , quelque soit la touche appuyée.
* interruption RB0 non utilisée dans ce
contexte
Verif du code obtenu pour chaque colonne
Test aussi du BP Reset =0 si appuyé.
Extrait code : Principe d'activation Colonne et lecture lignes
TRISA= TRISA & 0B01111111; //
aucune sortie (hormis RA7)
LATA=0; // RAZ latch PORTs de sortie
PORTA=0; // RAZ info PORTA
TRISA.B4=0; // active seulement la pin Colonne 1 en mode sortie
KEY_C1=1; // Sortie RA4 au niveau 1
c1=PORTA & 0x0F; // lecture des 4 bits poids faible entree
PORTA
ByteToStr(c1,txt); // affichage valeur
CPrint(" C1 activée Lecture PORTA= ");
Print(txt);
c1=PORTB & 0x01 ;
ByteToStr(c1,txt);
CPrint(" , RB0= ");
Print(txt);
CRLF1();
KEY_C1=0; // Sortie RA4 au nivau 0
Delay_ms(500);
Resultat sur terminal :
Decodage
des touches clavier
décodage fait via une table de 3 x 9
3 .. pour 3 colonnes,
pourquoi 9 pour 4 Lignes ?
pour ne pas avoir à faire de décalage ou calcul ,sur la
lecture des entrées du fait de la progression binaire 1,2,4,8
La touche est donc en face de son poids binaire.
sans touche appuyée => code 000 = .
const code unsigned
char Key_Map[3][9]= {
{ '.','1','4','.','7','.','.','.','*'}, { '.','2','5','.','8','.','.','.','0'}, { '.','3','6','.','9','.','.','.','#'} }; |
1 2 3 |
4 5 6 | |
7 8 9 | |
* 0 # |
code associé :
CPrint("
Test Decodage Touches Keyboard via table de transcodage\r\n");
CPrint(" une seule colonne activée en sortie, à la fois\r\n
");
CPrint(" Activation colonne via sortie C1=RA4.. C3=RA6\r\n");
CPrint(" Lecture entrees Lignes sur L1=RA0.....L4=RA3 \r\n");
CPrint(" RB0 = etat de sortie du OU sur les 4 entrees Lignes
\r\n");
CPrint(" Sortie du test via touche # \r\n");
Key=0;
while(Key !='#') // tant qu'on ne voit pas la touche #
{
for (i=0;i<3;i++) // on explore les colonne de 0 à 2
{
TRISA= TRISA & 0B01111111; // aucune sortie , hormis led_temoin
en RA7
switch(i) // selection de la colonne f(i)
{
case 0: KEY_C1=1; break;
case 1: KEY_C2=1; break;
case 2: KEY_C3=1; break;
default:
KEY_C1=0; KEY_C2=0; KEY_C3=0; // 3 sortie à 0
TRISA= TRISA & 0B01111111; // aucune sortie (hors RA7) , donc
3 colonnee en entrees
}
Lig= PORTA & 0x0F; // lecture des 4 bits poids faibles PORTA
= 4 lignes
Old_Key=Lig; // Memo de la lecture
Delay_ms(20); // delay anti-rebond (valeur 20ms passe partout)
Lig= PORTA & 0x0F; // relecture des 4 entrees Lignes
if ((Lig>0) && (Lig==Old_Key)) // si lecture =
ancienne lecture
{
Key=Key_Map[i][Lig]; // decodage touche i=collonne Lig= poids
binaire= position dans la table
CPrint(", Touche "); UART1_Write(Key); // sur terminal
Test_RB0() ; // au passage test RB0 sortie du OU à diodes
}
KEY_C1=0; KEY_C2=0; KEY_C3=0; // RAZ des 3 sortie colonnes
}
Delay_ms(100);
}
CPrint(", \r\n Fin du test Keyboard\r\n") ;
Delay_ms(2000);
Resultat, en appuyant successivement les
touches dans l'ordre naturel ;
Test Decodage Touches Keyboard via table de transcodage
une seule colonne activée en sortie, à la fois
Activation colonne via sortie C1=RA4.. C3=RA6
Lecture entrees Lignes sur L1=RA0.....L4=RA3
RB0 = etat de sortie du OU sur les 4 entrees Lignes
Sortie du test via touche #
, Touche 1 , RB0= 1
, Touche 2 , RB0= 1
, Touche 3 , RB0= 1
, Touche 4 , RB0= 1
, Touche 5 , RB0= 1
, Touche 6 , RB0= 1
, Touche 7 , RB0= 1
, Touche 8 , RB0= 1
, Touche 9 , RB0= 1
, Touche * , RB0= 1
, Touche 0 , RB0= 1
, Touche # , RB0= 1
,
Fin du test Keyboard
USAGE du N.C.O pour la
sortie BUZZER
Ce PIC évolué comporte un systeme PPS ,
permettant un aiguillage de PIN MCU vers une fonctionnalité
de celui ci ..
jai donc associé la PIN RC0 sur la sortie du NCO.
Unlock_IOLOCK();
// UART1
PPS_Mapping_NoLock(_RC7, _INPUT, U1RXPPS);
// NCO
RC0PPS = 0x26; //RA5->NCO1:NCO1;
Lock_IOLOCK();
Suivant la source d'horloge aiguillé
const code float NCO1_Clock[5]={64000000,64000000,32000,500000,31000};
vers l'entrée du NCO on peut parcourir un large domaine de
frequence => de 0,1Hz à >10MHz possible,
Le signal de sortie sera calibré aussi avec un duty-cycle de 50%
( 50% ON 50% OFF)
avec NCO1_Clock_Choix=3; // 3=500Khz
Il est donc aisé de choisir une frequence, on a le choix !
reglages ici à 600 ou 1200 Hz , affectable au Buzzer
!
Test fait avec un Buzzer piezzo directement raccordé sur la
sortie RC0 et VCC => OK
On
pourrait meme sortir une melodie
Formule permettant de definir une Frequence à partir de l'increment
Ou l'Increment à utiliser pour une Frequence donnée.
d'ou les fonctions en C:
Code generant une frequence en fonction de l'increment U1 , la
Dure en mS, la valeur de frequence sur sortie Terminal si Debug0=1
void
Out_NCO_Freq( unsigned long U1, int Duree,char Debug0);
ou plutot celle-ci :
------------------------------------------------------------------------------------
void
Play_Note_via_NCO( float Fr, int Duree,char Debug2)
{ NCO1CON.NCO1EN=0;
Increment= (unsigned long) ( Fr* NCO1_Coeff);
pI=&Increment;
NCO1INCU= *(pI+2);
NCO1INCH= *(pI+1);
NCO1INCL= *(pI+0);
if(Debug2==1)
{
Float2Ascii (Fr, CRam1,1);
Print (CRam1);
CPrint (" -> Increment= ");
LongWordToStr(Increment,CRam1);
Print (CRam1);
CRLF1();
}
NCO1CON.NCO1EN=1;
for (i=0;i<Duree;i++) Delay_ms(1);
NCO1CON.NCO1EN=0;
}
---------------------------------------------------------------------------------
Test , mesures :
Play_Note_via_NCO(
440.0, 3000,1); // pour test avec SQA ANALYSER SQA=1; Play_Note_via_NCO( 600.0, 3000,1); SQA=0; Play_Note_via_NCO( 1200.0, 3000,1); |
![]() |
code de test pour capture signal | SQA analyser F=440 et F=600Hz |
Resultat sur ecran terminal :
440.0 -> Increment= 1845
600.0 -> Increment= 2516
1200.0 -> Increment= 5032
MikroC 7.60
Projet :
Clavier_HT_18F27K42_2021-08.mcppi
Software : Clavier_HT_18F27K42_2021-0804.c
config : P18F27K42_Fosc_Interne_64Mhz.cfgsch
chargeur : Clavier_HT_18F27K42_2021-08.hex
Alarme
Sabotage
Le Timer4 ,
en mode Interruption, est exclusivement réservé à cet
effet , avec une base de temps de 0,5sec
On exploite un decompteur (Cpt4)
précédement initialisé avec un multiple de 0,5Sec, pour
éablir une alarme
de 0,5s (minimum) à plusieurs minutes .=> durée totale = Cpt4
* 0.5 secondes
Le NCO est mis en oeuvre (ou pas), suivant l'etat du flag
Validation Buzzer (VBuzz)
Detection de la valeur pair ou impair du décompteur Cpt4 ,
* pour faire clignoter la Led Rouge si mode Program Prg=1
0,5sec ON, 0,5 sec Off.. idem pour l'emission du Son
* pour jouer ou pas , la tonalité (discontinue aussi) 0.5sec ON
via la commande NCO1CON.NCO1EN=1;
puis OFF via la commande NCO1CON.NCO1EN=0;
La valeur de Tonalité Alarme (frequence) est initialisée via la
fonction Set_Note_NCO( float Fr)
Une fois lancée, l'Alarme est quasi autonome .. jusqu'à la fin
de la durée donnée par le décompteur CPT4
arrivant à zero.
Init de l'alarme : void Init_Timer4_for_Alarm(int
T4 ); parametre T4=> pour n*0.5sec
Timer4 auto rearmable !
Usage des
Interruptions Vectorisées :
ce PIC autorise l'usage des IVT au lieu du mode classic dit
"Legacy" avec 2 niveaux d'interrupt Hig and Low
Ici chaque interface avec Flag d'interruption, a son Propre
Vecteur d'Interruption :
void Interrupt_TMR0() iv IVT_TMR0 ics
ICS_AUTO .......... duree
action monostable relais
void Interrupt_TMR1() iv IVT_TMR1 ics ICS_AUTO...........boucle timeout de 3sec
void Interrupt_Timer4() iv IVT_TMR4 ics ICS_AUTO ........centrale de clignotement 500ms pour Led et buzzer
void Interrupt_RB0() iv IVT_INT0 ics ICS_AUTO
................... Detection appui touche clavier
void Interrupt_UART1() iv IVT_U1RX ics ICS_AUTO ............... Reception sur UART
Les lignes du Clavier , regoupées via un OU à diode , sont
aiguillées sur l'entree RB0 , pouvant générer une interruption
Des qu'une touche est enfoncée.. pour effectuer le traitement de
decodage clavier.
La boucle de fond du programme ,étant l'attente d' un appui de
touche, sinon, le MCU ne FAIT RIEN !
l'interrupt RB0:
void Interrupt_RB0() iv IVT_INT0 ics
ICS_AUTO
{
if ( ( INT0IF_bit==1) && ( INT0IE_bit==1))
{
// U1TXB='?';
Delay_ms(1);
if (PORTB.B0==1)Drapeaux.Key_ON=1;
PIR1.INT0IF =0;
PIE1.INT0IE=0;
}
}
à noter : vu que ce MCU n'est pas chargé par d'autres en
taches , et sans autre peripheriques
on pourrait donc se passer de ce mode interrupt et rester en
pooling permanent du clavier
mais permet d'evoluer plus tard ( rajout d'un LCD, dialogue en
BlueTooth, ..)
L'avantage est de ne pas rater un appui de touche, ni rebonds !
La plupart du temps, l'operateur va saisir un code de 4 touches ,
pour réaliser une action sur un relais
la fonction Saisie_Code() , fait
cela
en testant :
*que chaque touche soit numerique (0 à 9) ,
*que chaque touche soit saisie en un temps minimum de 3 sec..
sinon Timeout -> alarme simple-> recommencer au debut
*que le code complet soit reconnu ( existant en interne et Eeprom)
*aide à la saisie , via l'usage des Leds pour le synchronisme.
Une erreur sur touches specififique ou touche de validation
entraine une phase d'alarme et retour en attente de saisie .
Au bout de 3 alarmes => alarme
Sabotage visuelle et sonore pendant 2mn maxi.
Report d'alarme distant .. et Appel du GIGN..
un code spécifique est utilisé pour entrer en mode
programmation,
pour modification :
* soit du code acces en programmation
* soit des codes de commande des 4 relais et du Port Auxiliaire
en mode OUT, via leur code ID
Outre le code ID, le codage d'un Relais comprend :
La configuration de mode de commande associé (CF):
0=Bistable ON/OFF , 1=Monostable de 1sec, 9= Déprogrammé au
Repos
Verification du mode de commande : si
erreur , Alarme , et increment nb de sabotage
Puis pour les configuration CF=0 ou CF=1, le code de commande :
Saisir 4 touches : tout en verifiant que le code modfié soit
different des autres et de 0000
Verification du code de commande : si
erreur , Alarme , et increment nb de sabotage
Puis il faut valider le tout
saisir 1 seule touche : avec usage specifique (Verte * ) pour
valider les entrées réalisées.
et ce , toujours avec un timing à respecter ..sinon annulation (et
tout recommençer).
ou Alarme si erreur de touche et on
recommence tout
Je me sers abondament de L'UART1 pendant la periode de debuggage
et test
pour suivre l' évolution du programme.
*Mode
Super User (pour me faciliter les re-parametrages
!)
01/10/2021
Pour une init / configuration complete et hyper rapide , des
codes Clavier, via la liaison UART1 et commande specifique
au clavier terminal YAT PC
utilisation d'un petit fichier texte ( ou directement dans la
ligne de commande envoi du terminal)
exemple : ;1287;1113;2224;3335;4446;Config;0;0;0;1;1;End
avec un prefixe et un suffixe délimiteurs , ainsi que la
caractere ';'.
nom du fichier txt : Config_Forcee.txt
Rappel matériel : liaison
UART vers PC terminal via interface USB/TTL
exemple d'utilisation (log terminal YAT):
partie software :
Dans la boucle d'attente
appui touche , test si reception UART
void Saisie_Code(void){
...etc .....
CPrint(" Start Timeout 3 sec\r\n");
Arme_Timer1(30); // 30x0.1= 3 sec
Drapeaux.Key_ON=0;
Raz_Buffer1(); // prepare
la possibilité de recevoir sur UART
do
{
Traite_Touche_Clavier(); // si appui touche clavier ,recupere le code
touche
if(Flag_Buffer1>0) //
on a reçu quelque chose sur l'UART
{
Forcage_Init_Mcd(); //
fonction d'init des codes via fichier terminal
Flag_Buffer1=0;
}
}
while( ( Drapeaux.Key_ON==0) && (Drapeaux.Tmr1_Elapsed==0)
);
......etc ..
Forcage_Init_Mcd()
à suivre .. avec une liaison
Bluetooth HC06 sur l'UART.
exemple d'usage ici
En résumé : le codage clavier peut etre
modifié :
* 100% Manuel, via les touches clavier, en suivant un protocole
bien défini .. appui successif de plusieurs sequences de touche
* un FORCAGE distant via Terminal ou BlueTooth (
uniquement en version Digi 4000).
* une commande BP RESET
distant ,qui RAZ le compteur de sabotages et remonte les
derniers codes sauvegardés en EEPROM
* un RESET MCU , qui remonte le nombre de
sabotages et les codes sauvegardés précédement en EEPROM PIC
* un rechargement du programme via ICSP , avec les codes "USINE",
sauf si on inhibe l'ecriture (écrasement) eeprom dans MPLABX IPE.
* un Nombre de Sabotage >2 inhibe tout et genere une alarme
visuelle et sonore de 120sec
mais permet une Reprogrammation Manuelle (si on connait le code
de programmation)
sinon, il faudra un RESET distant...
rappel:
code 0 = code programmation
code 1 = code commande relais 1
code 2 =code commande relais 2
code 3 = code commande relais 3
code 4 = code commande relais 4
code config mode Action :
mode de commande des 4 relais (bits 1,2,3,4 dont le bit 0->non
utilisé))
0= togle ON/OFF et 1=Monostable 1sec
La
Musique adouçit les moeurs ...
un petit air de "Mission Impossible" pour AVERTIR une
modif sur les codes Clavier! en EEPROM
Le NCO de ce PIC permet de jouer une note quelqueconque (
frequence et duree imposée)
La RTTL norme de transposition musicale , bien
developpée sur
le site de Fantaspic ( en ASM) par TempsX
m'a été bien utile , mais ici ,on est en C !
unsigned char Mission_Impossible[]={
0x4D,0x69,0x73,0x73,0x69,0x6F,0x6E,0x20,0x49,0x6D,0x70,0xFF,
0x01,0x33,0xB1,0x00,
0x4F,0x01,0x45,0xD0,0x00,0x4F,0x01,0x33,0xB1,0x00,0x4F,0x01,0x45,0xD0,0x00,0x4F,
0x01,0x33,0xB1,0x00,0x4F,0x01,0x45,0xD0,0x00,0x4F,0x01,0x33,0xB1,0x00,0x4F,0x01,
0x45,0xD0,0x00,0x4F,0x01,0x33,0xB1,0x00,0x4F,0x01,0x33,0xB1,0x00,0x4F,0x01,0x45,
0xD0,0x00,0x4F,0x01,0x59,0x9C,0x00,0x4F,0x01,0x6E,0x14,0x00,0x4F,0x01,0x83,0xA3,
0x00,0x4F,0x01,0x9A,0xDF,0x00,0x4F,0x01,0x9A,0xDF,0x00,0x9E,0x00,0x00,0x00,0x01,
0x3C,0x01,0x9A,0xDF,0x00,0x9E,0x00,0x00,0x00,0x01,0x3C,0x01,0xE8,0x8D,0x00,0x9E,
0x00,0x00,0x00,0x00,0x9E,0x02,0x24,0x72,0x00,0x9E,0x00,0x00,0x00,0x00,0x9E,0x01,
0x9A,0xDF,0x00,0x9E,0x00,0x00,0x00,0x01,0x3C,0x01,0x9A,0xDF,0x00,0x9E,0x00,0x00,
0x00,0x01,0x3C,0x01,0x6E,0x14,0x00,0x9E,0x00,0x00,0x00,0x00,0x9E,0x01,0x83,0xA3,
0x00,0x9E,0x00,0x00,0x00,0x00,0x9E,0x01,0x9A,0xDF,0x00,0x9E,0x00,0x00,0x00,0x01,
0xFF};
J'ai volontairement raccourci le fichier initial ..
pour avoir une durée globale plus courte.
le Terminateur 0xFF sert à cela ..
Lancement Play_Mission_Impossible(); au démarrage du programme
..
et lorsque dans l'Etape 7 , on Sauve les parametres de
configuration codes en EEPROM
Sauve_Parametres_en_Eeprom();
Play_Mission_Impossible()
Software :
void Play_Mission_Impossible(void)
{
unsigned int k, Index=0;
char *pM;
pM=&Mission_Impossible[0] ;
NCO1_Clock_Choix=4; // 4=31250Khz
NCO1CLK= PWS_Valeur<<5 | NCO1_Clock_Choix ;
NCO1EN_bit=0;
do
{
cx=*(pM+Index); ;
if (cx==0xFF) break ;
Index++;
}
while(Index<50);
*(txt+Index)=0;
strncpy(txt,pM,Index);
CPrint( "Melodie : ");
Print (txt);
Index++;
do
{
cx=*(pM+Index) ;
if ( cx==0xFF) break;
NCO1INCU= cx ; cx=*(pM+Index+1) ;
NCO1INCH= cx ;cx=*(pM+Index+2) ;
NCO1INCL= cx ;cx=*(pM+Index+3) ;
k= cx ;
k=k<<8;
cx=*(pM+Index+4) ;
k=k +cx;
NCO1EN_bit=1;
for (j=0;j<k;j++) Delay_ms(1);
NCO1EN_bit=0;
Index=Index+5;
}while(cx!=0xFF) ;
CPrint( " ..End\r\n");
NCO1_Clock_Choix=3; // 3= 500 Khz
NCO1CLK= PWS_Valeur<<5 | NCO1_Clock_Choix ;
}
L'Application :
Remarks&
Ticks :
EEPROM : concernant l'EEPROM , en NVM, fait partie integrante de
l'adressage de ce PIC
au niveau de MPLB IPE V5.30 utilisé conjointement avec le Pickit
4
( car mon vieux Pickit3 n'est pas vraiment compatible , meme si
le MCU peut etre reconnu!)
il faut Préserver l'espace NVM (Non Volatile
Memory) Eeprom de 0x310 000 à 0x310 03FF
sinon apres la compilation ,on telecharge le *.HEX en faisant d'abord
une RAZ du contenu Programme et Eeprom.
J'ai décidé d' utilisé l'index 0 de l'eeprom pour y mettre un
flag =99 pour signaler si le programme Utilisateur
s'est servi de l'eeprom ou non .. afin d'y stocker le parametrage
minimum dit "Usine "
ce qui n'empeche pas le probleme précité ci-dessus !
L'adressage Eeprom est sur 16 bits , et la donnéee EEprom sur 8bit
!
on a donc que 1024 bytes dispo en EEPROM
les fonction MikroC de la lib EEPROM : EEprom_Write , EEProm_Read
semblent OK
EEprom
test:
/*
// run une fois !
CPrint(" TEST Write To Eeeprom \r\n");
for (i=0;i<1023;i=i+16)
{
cx = (unsigned char) (i & 0x00FF);
EEPROM_Write(i,cx);
Delay_ms(5);
WordToStr(i,CRam1);
CPrint(" Write EEPROM @= ");
Print(CRam1);Espaces;
ByteToStr(cx,CRam1); Print(CRam1);
CRLF1();
}
*/
CPrint("\r\n ------------------\r\n TEST Read Eeeprom \r\n");
for (i=0;i<1023;i=i+16)
{
cx=EEPROM_Read(i);
Delay_ms(5) ;
WordToStr(i,CRam1);
CPrint(" read EEPROM @ ");
Print(CRam1);Espaces;
ByteToStr(cx,CRam1); Print(CRam1);
CRLF1();
}
CPrint("\r\n End\r\n");
while(1);
Test en rechargeant le *.HEX
et cochant
protection EEPROM dans
MPLAB IPE !!
(0.000) ------------------
(0.003) TEST Read Eeeprom
(0.004) read EEPROM @ 0 0
(0.008) read EEPROM @ 16 16
(0.007) read EEPROM @ 32 32
(0.007) read EEPROM @ 48 48
(0.007) read EEPROM @ 64 64
(0.008) read EEPROM @ 80 80
(0.007) read EEPROM @ 96 96
(.... etc ....)
((0.008) read EEPROM @ 928 160
(0.006) read EEPROM @ 944 176
(0.008) read EEPROM @ 960 192
(0.007) read EEPROM @ 976 208
(0.007) read EEPROM @ 992 224
(0.007) read EEPROM @ 1008 240
(0.002)
(0.000) End
SINON, avec protection EEPROM NON cochée => RAZ EEPROM
(0.000)
(0.000) ------------------
(0.000) TEST Read Eeeprom
(0.000) read EEPROM @ 0 255
(0.032) read EEPROM @ 16 255
(0.000) read EEPROM @ 32 255
(0.000) read EEPROM @ 48 255
(0.000) read EEPROM @ 64 255
(0.000) read EEPROM @ 80 255
... etc ...
(0.000) read EEPROM @ 976 255
(0.036) read EEPROM @ 992 255
(0.000) read EEPROM @ 1008 255
(0.000)
(0.000) End
Bug MikroC 7.60:
si on sauvegarde le fichier source avec un autre nom, dans le
meme projet
"Interrupt mode" repasse en mode" Legacy" ..=>
errors
malgré le fichier de config " P18F27K42_Fosc_interne_with_PLL_64MHz_with_Vectored_IT.cfgsch"
présent dans le directory du projet.
sur ce PIC évolué ,
Commande de relais :
via table indexation de commande de relais
On peut certes avoir un acces direct et facile à une commande de
relais
ex: Relais_1=1 ou Relais1=0
mais pour un acces indirect, via le n° du bit du PORT (de 8 bits)
sorties vers Relais
il faut gérer le poids de ce bit et utiliser une logique de
commande AND ou OR .
const unsigned char Poids[]={1,2,4,8,16,32,64,128};
//
rappel RB0 utilisé par ailleur !
Deroulement
du Programme sur Terminal PC
Ce Modele de
Presentation est généralisé sur TOUTES MES APPLICATIONS (
Programmes)
pour connaitre le contenu d'un PIC en présence et avec quoi il
est programmé !. = ID card
Terminal YAT
18F27K42 UART1 19200 .. à 115200bds
UART1 est quasiment toujours utilisé pour suivre le deroulement
d' un programme
vu le tres peu de ressources MCU nécessaires.
Possibilité d'horodater chaque ligne , ou ecart de temps entre
chaque ligne ..
Traçage Programme : : Test
du 19aout 2021
28/11/2021
Rajout
Choix fonctionalités sur pin RA7
en fonction de l'etat des 2 pins RB7 et RB6 ( pins ICSP !), via 2
straps,
on peut choisir la version de programme : soit pour le DIGIT3000
, soit la nouvelle version DIGI4000
au niveau hardware, carte MCU , le commutateur Aux(I/O) permet
la selection RB6 ou RB7 ..
pour l'aiguillage partie software correspondante
et l'aiguillage Hardware, le role du fil B2 comme entree ou
sortie.
RB6 | RB7 | Action | Mode_RA7 |
= valeur |
0 |
0 |
pas de traitement RA7 |
UNUSED |
2 |
0 |
1 |
RA7 en Entrée, état B2 distant envoyé par BlueTooth |
ENTREE |
1 |
1 |
0 |
RA7 en sortie; Cde B2 Relais via BlueTooth |
SORTIE |
0 |
1 |
1 |
pas de traitement RA7 |
UNUSED |
2 |
avec ce hardware un peu
particulier :
*Pour RA7 en entrée .. (choix RB6=0 RB7=1)
le choix des resistances doit etre judicieux, pour permettre de
rester dans la fourchette des niveaux logiques
Lorsque T7 est bloqué, Le niveau 1 , via pull up de R25, est
dérivé par R48 +t jonction base Emetteur de T8 + 100 ohms
vers le 0V Gnd, qui agit en diviseur de tension. Un niveau de 2,4
devrait assurer un 1 logique. TTL
nota: ce relais ne peut etre commandé QUE par l'appli
distante BlueTooth ( ou terminal / UART)
02/12/2021
Rajout
de 3 infos d'états Externes
But : récuperer les 3 infos , qui sont
affichées sur les 3 leds en face avant du plastron clavier
version DIGIT3000
Ces infos proviennent du comparateur à fenêtre TCA965, pilotant
les sorties d'un CD40106
( trigger CMOS), niveau 12V, alimentant les 3 leds : Il n'y
a donc qu'une seule des 3 sorties active à la fois !
Il n'y a pas assez d'entrees logiques dispo sur le PIC pour une
exploitation directe de chacune de ces 3 infos !
Elles seront combinées pour créer 3 niveaux facilement
reperables/decodables sur lentrée analogique RB5.
L'interface Hardware :
Interface des sorties de visualisation des 3 etats de la centrale
dalarme vers RB5 :
Définition des seuils ADC 12 bits (maxi ADC =4095)
nota:
On fait l'init ADC au demarrage programme et
La mesure ADC est faite toute les 500mS , via l'interrupt Timer4
!
void Interrupt_Timer4()
iv IVT_TMR4 ics ICS_AUTO // (execution every 500mS)
{
if ((TMR4IF_bit==1) && ( TMR4IE_bit==1) )
{
if ( Mode_RA7<2) Mesure_RB5=ADC_Get_Sample(13);
... etc ....
leds | VERT | JAUNE | ROUGE | |
seuil Haut | 1500 | 2400 | 3500 | points |
seuil (arrondi) | 1300 | 2100 | 3200 | points |
seuil Bas | 1000 | 1900 | 3000 | points |
R pied | 680 | 1800 | 6800 | ohms |
etat vrai => | FERME | OUVERT | ALARME |
La priorité d'affichage est celle du niveau de tension !
soit FERME.,OUVERT,,ALARME..sur l'appli Android BlueElctronics
distante
on a donc , normalement, en quasi permanence :
Voyant Vert (texte : Fermé), autres voyants eteints
si le Portail est Ouvert : voyant Jaune (texte : Ouvert)
si la Centrale d'Alarme est en service Alarme , Voyant Rouge (texte:Alarme)
Masquage des Infos exterieurs non activées (Voyants sur
appli Android):
Remarque :
on ne peut pas Masquer completement l'objet "Voyant"
avec cette application android
Pour ne visualiser qu'une seule entrée active parmis les 3
par contre on peut changer la couleur du voyant .. et le mettre
en Noir, bien moins visible sur fond Noir !
Ce traitement se fait dans la partie "Attente 4 frappes
clavier" (3sec maxi) d 'appui touche
if(Mode_RA7<2)
// Clavier en mode Extensions activées
{
strConstRamCpy(CRam1,"*H65536*;"); // affiche ma mesure
ADC en points
WordToStr(Mesure_RB5,CRam1+2);
*(CRam1+7)='*'; Print(CRam1);
if( (Mesure_RB5>SeuilB_12V) && (Mesure_RB5<SeuilH_12V))
Presence_12V=1; else Presence_12V=0;
if( (Mesure_RB5>SeuilB_Ouvrant) && (Mesure_RB5<SeuilH_Ouvrant))
Etat_Ouvrant=1; else Etat_Ouvrant=0;
if( (Mesure_RB5>SeuilB_Alarme) && (Mesure_RB5<SeuilH_Alarme))
Etat_Alarme_Maison=1; else Etat_Alarme_Maison=0;
if(Etat_Alarme_Maison==1) CPrint("Alarme *LR255G0B0*;");
else CPrint("*LR0G0B0*;");
if(Etat_Ouvrant==1) CPrint("Portail *RR255G0B0*;");
else CPrint("*RR0G0B0*;");
if(Presence_12V==1) CPrint("12V *PR255G0B0*;"); else
CPrint("*PR0G0B0*;");
.... etc
}
exemple de Codage pour
le voyant Alarme (reconnu par l'application BlueElectronics) :
*L = tag de reconnaissance
R255G0B0 = couleur RGB Rouge=255= maxiam ( Vert=0 Bleu=0)
* = terminateur de commande
; séparateur de commande
PIC | UART-- | --HC05 | ![]() |
.....![]() |
Tablette LENOVO Android |
Le HC06 doit etre configuré pour 115200 bauds
( = vitesse coté PIC)
via une connection DIRECTE entre terminal PC YAT <--->
Cordon prolific USB/TTL --4 Pins --Module HC06
Le +5V USB alimente le Module .. les lignes TX et RX sont
croisées.
par défaut les modules sont à 9600 bds config
Usine
On démare donc avec le terminal YAT à 9600 bds
Certaines commandes sont rajoutées : Pre-définies via un
fichier de config terminal : Terminal_HC06_115200_2021.yat
A la toute premiere commande :
AT ---> le
module DOIT IMPERATIVEMENT REPONDRE --->OK
nota : Le module ne doit PAS ETRE Associé !
Ensuite on récupere les parametres du module : version, adresse
MAC,nom ...
Pour le NOM du device , on peut mettre un NOM Significatif , (
exemple CLAVIER )
de plus, je prefere lui rajouter les 4 valeurs Hexa de son
adresse MAC
Ceci pour bien repérer QUI est QUI , lorsqu'on a plusieurs
modules BT en vue sur le réseau BlueTooth.
En plus , j'ai mis des pastilles de couleur sur mes modules : R =Rouge
pour celui ci
d'ou le changement de Nom en DIGIT3000_2022 !
Changement de la Vitesse en bauds
AT+UART=115200,0,0 -> réponse OK
Apres rien ne va plus ... CAR IL FAUT CHANGER aussi LA VITESSE DU
TERMINAL !!!-> à
115200 bds
On reconnecte ensuite le module BT ainsi configuré , sur la
sortie UART Carte PIC
Les 4 pins de la carte permettent de relier les SignauxTX,RX et
alim au Module BT: DIGIT3000_2022
pour cette fois on utilisera une Tablette Android
Ma Tablette Lenovo en service, j'active le BlueTooth, lance un
SCAN, pour Appairer /Associer ensuite mon nouveau module
Une fois appairé celui ci se retouve dans la liste des modules
BT decouverts.
Installer et Lancer l'appli BT SIMPLE TERMINAL
Cette appli est un Simple Terminal, donc ne peut pas faire de
traitement combinatoire !
puis selectionner le nom du module , ici : CLAVIER-2A03R !
Une fois connecté ,l'appli affiche la vue TERMINAL
via laquelle on peut envoyer ou recevoir tout, via l'UART du PIC
!
On pourrait aussi mettre des commandes specifiques sous les 6
touches de fonctions ... config touche sauvegardée
![]() |
![]() |
|
Selectionner le bon module BT |
log de toute action effectuée sur le clavier Digicode |
** On peut donc , aussi envoyer la sequence de
config Forcée ! via le champ d'entrée " Enter Ascii data to send"
dommage , on ne peut pas la sauvegarder AVEC les parametres
touches de fonctions
Nota :
au lieu d'une Tablette Android / Mobile Phone , on pourrait Aussi
utiliser le Terminal PC ( YAT !)
avec un PC portable equipé d'une cle USB/ BlueTooth APM ou
Koenig
On pourrait aussi , avec une appli dédiée (Appinvertor 2 pour
Android ou RapidQ Basic pou PC ou ...)
Mettre les commandes DIRECTES codées : BP Ouverture Portail ,
Allumage Eclairage .... etc
se substituant aux sequences d'appuis de BP clavier DIGICODE.
Test
avec Application BlueElectronics
(appli SANS Programmation)
sur Tablette Android Lenovo TAB37 (BlueTooth
activé) et HC06 coté PIC CLAVIER
*version Androi 5.0.1 sur tablette
Rappel : lien sur l' Appli android BlueToothElectronics.apk
telechargement via
https://play.google.com/store/apps/details?id=com.keuwl.arduinobluetooth
Le design de l'appli est défini par le fichier : Digit3000_2022_0302.kwl
Usage de boutons,voyants,textes,Bargraph ... etc .. déja
prédefinis, qui sont ensuite à configurer .
La touche EDIT permet de modifier un Panel déja enregistré,
sinon on peut partir "from scratch !".
vue Design
capture d'écran
liaison USB Lenovo TAB37 et PC Win10
capture ecran stockée en : Ce PC\Lenovo TAB3 7 Essential\Mémoire
de stockage USB\Pictures\Screenshots
rev : mars 2022
ex Touche ON/OFF relais 1
Edit :
Turn ON sends R1ON
Turn OFF sends R1OF
IMPORTANT:
La commande est définie coté PIC, qui est chargé de la
reconnaitre ..
pour les envois de commande coté Android , faire entrée apres
le Texte , pour avoir un terminateur (CR ou LF ?)
ex: Voyant Etat Centrale d'Aalrme
Edit :
TAG de reconnaissance :
le message commence par une étoile et une lettre
Receive on *R
la couleur VRJN est rajouté au texte de
reception *R pour définir la couleur du voyant
si etat 1 :Couleur = Red=255,G=0,B=0 => Rouge
si etat 0 : Couleur=Green 255,R=0,B=0=>Vert.
si etat 2 :Couleur = Red=255,G=255,B=0 => Jaune
ou sinon Couleur =Noir R=0,G=0;B=0=>Noir.
.....set au masquage d'objet, sur fond noir !
une asterix * sert de fin de message,
Les messages sont séparés par des ';'
exemple envoi par le PIC de l'etat ouvrant ouvert "OUVERT"
=> couleur JAUNE
*R255,G255,B0*;
Software PIC:
J'ai inséré le dialogue BT dans la
boucle d'attente principale : Saisie_Code , qui
tourne sur 3 secondes d'intervalle
et laisse donc beaucoup de temps libre ( sans etre trop
interrompu ,sans appui de touche clavier, hormis l'interrupt
Timer1 de 100mS et Timer4 de 0,5sec)
L'envoi
des données se fait donc toutes les 3 secondes ....
rev 16/10/2021
// ---- Envoi des données PIC vers appli Android -----------
// 0123456789012345678
To_be_Alive_Compteur++;
strConstRamCpy(CRam1," Idx=*T.....*;*G0*;");
WordToStr(To_be_Alive_Compteur,CRam1+7);
*(CRam1+12)='*';
*(CRam1+16)=MSabotage+48; Print(CRam1);
if(Etat_Alarme_Maison==1) CPrint("*LR255G0B0*;"); else
CPrint("*LR0G255B0*;");
if(Etat_Ouvrant==1) CPrint("*RR255G0B0*;"); else CPrint("*RR0G255B0*;");
if(Presence_12V==1) CPrint("*PR255G0B0*;"); else CPrint("*PR0G255B0*;");
CPrint("\r\n"););
//------------------------
Puis,
pour la partie reception de données externes :
Preparation
du buffer de reception UART et ARMEMENT interrupt UART1
on laisse
passer le traitement Touche Clavier , actif si RB0 a détécté
un appui de touche
Si on a reçu une commande externe terminée par LF , et
détectée via la montée du Flag_Buffer1
on lance la fonction Forcage_Externe_via_AIR_Cdes();
et on continue en séquence
Raz_Buffer1();
// RB0 IT
armement
PIR1.INT0IF =0;
PIE1.INT0IE=1;
Arme_Timer1(30); // 30x0.1= 3 sec
Drapeaux.Key_ON=0;
do
{
Traite_Touche_Clavier();
if(Flag_Buffer1==1)
{
Forcage_Externe_via_AIR_Cdes();
Flag_Buffer1=0;
}
}
while( ( Drapeaux.Key_ON==0)
&& (Drapeaux.Tmr1_Elapsed==0) );
La fonction de Lecture de infos envoyées
par l'Appli Android
La liaison BlueTooth coté PIC est faite avec un HC06 (
4 pins /6 utilisées)
Ce HC06 à été renommé : DIGIT3000_2022 (pastille
rouge de repere)
pour être facilement repérable lors de l'association au réseau
BlueTooth de la tablette Android ( via un Scan bluetooth)
Par défaut , le
code PIN d'association est le classique 1234 .
mais il peut etre modifié via le CLAVIER via
une sequence de touches particuliere !
Lorsqu'on lance l'appli BlueToothElectronic :
1 | Selectionner un Pannel |
2 | on connect un device |
3 | choix: BlueTooth Classique |
4 | dans la liste Paired Devices : selectionner VOTRE HC06 |
5 | click Connect ..si CONNECT OK.... click sur DONE |
6 | Le bon panel doit etre selectionné (encadré
en bleu) et le message connected to : apparait en haut ex: DIGIT3000_2022 et @MAC 00:18:E4:40:00:00:06 |
7 | tapez sur RUN |
8 | L'ecran complet est alors ACTIF |
9 | des messages doivent apparaitre toutes
les 3 sec ,dans la fenetre terminal (fond vert foncé), prouvant que la liaison est opérationelle |
Sens TAB37 -> PIC
les 4 +1 Boutons ON/OFF commandes de relais 1 à 4 + Port AUX Out
Le terminal montre l'etat reel des relais..
Le champ de commande Text (send) contenant la config. globale des
6 codes
( code prog et 5 codes commande Relais + 5 config relais)
Nota : .. remplace
une séquence de 48 appuis de touche Clavier! pour une reconfig complete.
Le (Bouton Poussoir) Reset MCU PIC : commande
software PIC _asm
reset , équivalente à l'appui du
BP local "USI" sur la carte PIC
Le (Bouton Poussoir) "Restoret Distant (By Air) : double commande ( meme resultat qu'avec le BP Local "BCK", RC1
sur carte PIC
Restauration des parametrages précédement sauvegardés en
Eeeprom)
Le champ de commande Text (send) Help ..non
renseignée pour l'instant
Nota : le champ de commande Text MSabot=1 Send ..est
provisoire , just pour les tests du bargraph
Sens PIC -> TAB37
Dans la fenetre Terminal : la présentation du
programme PIC18F27K42 au demarrage,
puis, ensuite tout le tracage du déroulement programme (interventions
sur le Clavier,mémo Eeeprom .etc ...).
+ les echanges avec Appli BlueTooth.
champ Texte (*V) Version Programme PIC
Etats pour les voyants Alarme et AUX en input
Champ Indicator (*L) Etat Port AUXin Vert=1 (ON)
Rouge=0 (OFF) <----entree RA7 du PIC
Champ Indicator (*R) Etat Alarme <--- Entree
Analogique RB5 du PIC
Champ Gauge : Bargraph horizontal ( 0 à 3), afficha la valeur en
cours de MSabotage
TEST Phase 1 :
Partie dialogue avec appli PIC ..testée OK à 100% OK
, hors appli CLAVIER ( interruption
UART et Timer seulement !) ..
Application coté PIC : Clavier_HT_18F27K42_2021_1012.c
Nota: au lancement de l'application PIC
Provisoirement :
les 2 premieres Minutes sont consacrées uniquement au
dialogue avec la tablette TAB37 ! avant le lancement Appli
CLAVIER
Un decompteur defile de 240 à 0 , on peut en sortir
preventivement par appui sur la touche ronde X
Test Phase 2 :
Test avec Appli CLAVIER opérationnelle ( incluant Toutes les sources d'interruptions
!)
Ok apres quelques ajustements et correctifs .
MAJ Software MikroC :
rev 16/10/2021
* Rajout info Externe
* Rajout Compteur To_Be_Alive
* suppression des élements pour tests
DIGIT3000 original
Source MikroC : Clavier_HT_18F27K42_2021_1016.c
chargeur : Clavier_HT_18F27K42_2021-1016.hex
CLAVIER_4x3_en_BlueTooth_avecPC_ou_Stratrail7.htm
Test avec mon vieux Phone Android Startrail 7
Application sur PC
REALISATION
Schema réalisés avec KICAD - (© Henri .TOUSSAINT)
contact : henri.toussaint@neuf.fr
Schémas :
Schema V1-0-1_Digit3000_2021-1205.pdf
version remplacement du clavier Digit3000
Circuit Imprimés
et Montage (virtuel) des composants
PCB en double face , crées par Henri TOUSSAINT (avec Kicad )
Version Mise à jour 02 Fev 2022
© Henri TOUSSAINT
PCB_2022-0203.pdf
pour demande de PCB .S'adresser directement au concepteur
.
Montage
(reel) des composants (Population)
Clavier DigiT 3000
Schema Digit3000:
schema_V-1-0-0_2021-1214.pdf
.. (réalisé avec Kickad)
Test
Final
Test des 3 variantes de l'application en fonction de l'etat des
pins RB7 et RB6
pour DIGI 3000
Mode_RA7=SORTIE
Etat Pin RB7=0 et Pin RB6= 1
Commande distante (Bluetooth) de RA7 ,en sortie sur relais 12V
distant de B2
.. avec report des 3 infos distantes leds V,J,R
voir Mode_RA7_SORTIE_Log_2021-1203.txt
Mode_RA7=ENTREE
Etat Pin RB7=1 et Pin RB6= 0
Lecture distante de RA7 , reçoit l'info distante de B2
....avec report des 3 infos distantes leds V,J,R
voir Mode_RA7_ENTREE_Log_2021-1203.txt
Mode_RA7_UNUSED
Etat Pin RB7=1 et Pin RB6= 1
pour DIGI3000
pas d'entree/sortie sur RA7
pas de report des 3 infos distantes leds V,J,R
pas de liaison Bluetooth (prévue)
voir Mode_RA7_UNUSED_Log_2021-1203.txt
Vérification finale : en version Digit3000
Traçage du Programme 2022-0131
suivi pas à pas du déroulement du programme,
via le terminal YAT connecté sur l'UART , via un cordon prolific
TTL/USB dans differents cas de figure.
voir détails dans Verifications_Traçage_Programme_2022-0203
(pdf)
avec Renseignements complementaires :
- page 1 : Hardware : affectation des pins
- page 2 : Eeeprom affectation et contenu ( Attention
au Bug MikroC sur la 1ere ligne adressage eeprom
!)
- page 3: Tags utilisés pour Appli Android BlueElecktronics
- pages 4,5,6 deroulé du programme apres chargement du µ.hex
dans le PIC
- page 7 : Liste des tests effectués**
- pages suivantes ..8 à 26 ............voir les détails sur les
19 tests
** Liste des Tests effectués sur Clavier Digit3000
avec programme version 30 janvier 2022
1. Test avec mauvais code Progr saisi
2. Test si Alarme avec Touche * dans la Saisie Code
3. Configuration code RELAIS#1 en mode On/ff
4. Test Erreur code ID, pendant la config pour Relais#2
5. recommence config Relais #2 en monostable
6. Test commande relais #2 monostable
7. Config Relais #3 bloqué
8. Test 2 commandes successives du Relais #1 (On/OFF)
9. Trois fois mauvaise Saisies pour se mettre en situation Alarme
sabotage
10. Test Restitution Eeprom via BP Restauration
11. Test Sequence Speciale Restitution en situation Sabotage
12. Test Sequence Speciale Restitution avec code en RAM (different
de 0000)
13. Test Sequence ultime " Nettoyage" (abortée ! si
sans Sabotage)
14. Test Sequence ultime " Nettoyage" ( Avec Sabotage )
15. Premiere Init si Flag Eeeprom = 0 au lieu de 99
16. Tentative de config. nouveau code progr avec code Usine 9999
17. Tentative de config. nouveau code Relais #4 avec code relais
#2 existant
18. Test Super commande directe Codage Distant (Terminal ou
BlueTooth)
19. Test Erreurs de saisie pendant Toute 1ere Initialisation
Digit3000_startrail_2022-0320.kwl
SOFTWARE :
Software réactualisé 20 mars 2022
Clavier_18F27K42_DIGIT_3000_2022-0320.mcppi
Clavier_DIGIT3000_18F27K42_2022_0320.c
Clavier_18F27K42_DIGIT_3000_2022-0320.hex
Clavier_18F27K42_DIGIT_3000_2022-0320.ihex
Melodies_Clavier_en_Ram_2022-0319_to_include.txt